@echo off
chcp 65001 >nul
echo ========================================
echo WMS Sample 服务配置管理工具打包脚本
echo ========================================
echo.

:: 设置变量
set SCRIPT_DIR=%~dp0
set PROJECT_ROOT=%SCRIPT_DIR%
set VENV_NAME=service_manager_env
set VENV_PATH=%PROJECT_ROOT%%VENV_NAME%
set BUILD_DIR=%PROJECT_ROOT%dist
set SPEC_FILE=%PROJECT_ROOT%service_config_manager.spec

:: 获取时间戳
for /f "tokens=1-4 delims=/ " %%a in ('date /t') do (
    set DATE_STR=%%d%%b%%c
)
for /f "tokens=1-2 delims=: " %%a in ('time /t') do (
    set TIME_STR=%%a%%b
)
set TIMESTAMP=%DATE_STR%_%TIME_STR%
set TIMESTAMP=%TIMESTAMP: =0%

echo [1/8] 检查虚拟环境...
if not exist "%VENV_PATH%" (
    echo 错误: 虚拟环境不存在，请先运行以下命令创建:
    echo python -m venv %VENV_NAME%
    echo %VENV_PATH%\Scripts\activate
    echo pip install pywin32 pyinstaller
    pause
    exit /b 1
)

echo [2/8] 激活虚拟环境...
call "%VENV_PATH%\Scripts\activate.bat"
if errorlevel 1 (
    echo 错误: 激活虚拟环境失败
    pause
    exit /b 1
)

echo [3/8] 验证依赖...
python -c "import win32serviceutil; import tkinter; print('依赖验证成功')" 2>nul
if errorlevel 1 (
    echo 错误: 依赖验证失败，请确保已安装 pywin32
    pause
    exit /b 1
)

echo [4/8] 清理旧的构建文件...
if exist "%BUILD_DIR%\service_config_manager" (
    rmdir /s /q "%BUILD_DIR%\service_config_manager"
)
if exist "%PROJECT_ROOT%build" (
    rmdir /s /q "%PROJECT_ROOT%build"
)

echo [5/8] 开始打包...
echo 使用spec文件: %SPEC_FILE%
pyinstaller --clean "%SPEC_FILE%"
if errorlevel 1 (
    echo 错误: 打包失败
    pause
    exit /b 1
)

echo [6/8] 验证打包结果...
set EXE_PATH=%BUILD_DIR%\service_config_manager\service_config_manager.exe
if not exist "%EXE_PATH%" (
    echo 错误: 可执行文件未生成
    pause
    exit /b 1
)

echo [7/8] 创建部署包...
set DEPLOY_NAME=WMS_ServiceManager_v2.1.0_Production_%TIMESTAMP%
set DEPLOY_DIR=%PROJECT_ROOT%deployments\%DEPLOY_NAME%

if not exist "%PROJECT_ROOT%deployments" mkdir "%PROJECT_ROOT%deployments"
if exist "%DEPLOY_DIR%" rmdir /s /q "%DEPLOY_DIR%"
mkdir "%DEPLOY_DIR%"

:: 复制主程序
xcopy "%BUILD_DIR%\service_config_manager" "%DEPLOY_DIR%\" /E /I /H /Y
if errorlevel 1 (
    echo 错误: 复制程序文件失败
    pause
    exit /b 1
)

:: 创建启动脚本
echo @echo off > "%DEPLOY_DIR%\启动服务管理工具.bat"
echo chcp 65001 ^>nul >> "%DEPLOY_DIR%\启动服务管理工具.bat"
echo echo 启动 WMS 服务配置管理工具... >> "%DEPLOY_DIR%\启动服务管理工具.bat"
echo start "" "service_config_manager.exe" >> "%DEPLOY_DIR%\启动服务管理工具.bat"

:: 创建检查脚本
echo @echo off > "%DEPLOY_DIR%\系统检查.bat"
echo chcp 65001 ^>nul >> "%DEPLOY_DIR%\系统检查.bat"
echo echo ======================================== >> "%DEPLOY_DIR%\系统检查.bat"
echo echo WMS 服务配置管理工具 - 系统检查 >> "%DEPLOY_DIR%\系统检查.bat"
echo echo ======================================== >> "%DEPLOY_DIR%\系统检查.bat"
echo echo. >> "%DEPLOY_DIR%\系统检查.bat"
echo echo [检查] 可执行文件... >> "%DEPLOY_DIR%\系统检查.bat"
echo if exist "service_config_manager.exe" ^( >> "%DEPLOY_DIR%\系统检查.bat"
echo     echo [通过] 可执行文件存在 >> "%DEPLOY_DIR%\系统检查.bat"
echo ^) else ^( >> "%DEPLOY_DIR%\系统检查.bat"
echo     echo [失败] 可执行文件不存在 >> "%DEPLOY_DIR%\系统检查.bat"
echo     goto :error >> "%DEPLOY_DIR%\系统检查.bat"
echo ^) >> "%DEPLOY_DIR%\系统检查.bat"
echo. >> "%DEPLOY_DIR%\系统检查.bat"
echo echo [检查] 依赖目录... >> "%DEPLOY_DIR%\系统检查.bat"
echo if exist "_internal" ^( >> "%DEPLOY_DIR%\系统检查.bat"
echo     echo [通过] 依赖目录存在 >> "%DEPLOY_DIR%\系统检查.bat"
echo ^) else ^( >> "%DEPLOY_DIR%\系统检查.bat"
echo     echo [失败] 依赖目录不存在 >> "%DEPLOY_DIR%\系统检查.bat"
echo     goto :error >> "%DEPLOY_DIR%\系统检查.bat"
echo ^) >> "%DEPLOY_DIR%\系统检查.bat"
echo. >> "%DEPLOY_DIR%\系统检查.bat"
echo echo [检查] 管理员权限... >> "%DEPLOY_DIR%\系统检查.bat"
echo net session ^>nul 2^>^&1 >> "%DEPLOY_DIR%\系统检查.bat"
echo if %%errorlevel%% == 0 ^( >> "%DEPLOY_DIR%\系统检查.bat"
echo     echo [通过] 具有管理员权限 >> "%DEPLOY_DIR%\系统检查.bat"
echo ^) else ^( >> "%DEPLOY_DIR%\系统检查.bat"
echo     echo [警告] 没有管理员权限，服务管理功能可能受限 >> "%DEPLOY_DIR%\系统检查.bat"
echo ^) >> "%DEPLOY_DIR%\系统检查.bat"
echo. >> "%DEPLOY_DIR%\系统检查.bat"
echo echo ======================================== >> "%DEPLOY_DIR%\系统检查.bat"
echo echo 系统检查完成！ >> "%DEPLOY_DIR%\系统检查.bat"
echo echo ======================================== >> "%DEPLOY_DIR%\系统检查.bat"
echo pause >> "%DEPLOY_DIR%\系统检查.bat"
echo exit /b 0 >> "%DEPLOY_DIR%\系统检查.bat"
echo. >> "%DEPLOY_DIR%\系统检查.bat"
echo :error >> "%DEPLOY_DIR%\系统检查.bat"
echo echo ======================================== >> "%DEPLOY_DIR%\系统检查.bat"
echo echo 系统检查失败！请检查部署包完整性 >> "%DEPLOY_DIR%\系统检查.bat"
echo echo ======================================== >> "%DEPLOY_DIR%\系统检查.bat"
echo pause >> "%DEPLOY_DIR%\系统检查.bat"
echo exit /b 1 >> "%DEPLOY_DIR%\系统检查.bat"

:: 创建使用说明
echo # WMS Sample 服务配置管理工具 > "%DEPLOY_DIR%\使用说明.md"
echo. >> "%DEPLOY_DIR%\使用说明.md"
echo ## 功能说明 >> "%DEPLOY_DIR%\使用说明.md"
echo 本工具用于管理 WMS Sample 系统的 Windows 服务，提供图形界面进行服务的安装、卸载、启动、停止等操作。 >> "%DEPLOY_DIR%\使用说明.md"
echo. >> "%DEPLOY_DIR%\使用说明.md"
echo ## 主要功能 >> "%DEPLOY_DIR%\使用说明.md"
echo - 服务管理：安装、卸载、启动、停止 WMS 服务 >> "%DEPLOY_DIR%\使用说明.md"
echo - 配置管理：修改 API 服务器配置和服务启动类型 >> "%DEPLOY_DIR%\使用说明.md"
echo - 状态监控：实时显示服务运行状态 >> "%DEPLOY_DIR%\使用说明.md"
echo - 权限检查：检查管理员权限状态 >> "%DEPLOY_DIR%\使用说明.md"
echo. >> "%DEPLOY_DIR%\使用说明.md"
echo ## 使用方法 >> "%DEPLOY_DIR%\使用说明.md"
echo 1. 以管理员身份运行 `启动服务管理工具.bat` >> "%DEPLOY_DIR%\使用说明.md"
echo 2. 在图形界面中进行服务管理操作 >> "%DEPLOY_DIR%\使用说明.md"
echo 3. 配置完成后保存设置 >> "%DEPLOY_DIR%\使用说明.md"
echo. >> "%DEPLOY_DIR%\使用说明.md"
echo ## 注意事项 >> "%DEPLOY_DIR%\使用说明.md"
echo - 服务管理操作需要管理员权限 >> "%DEPLOY_DIR%\使用说明.md"
echo - 请确保 WMS 主程序已正确部署 >> "%DEPLOY_DIR%\使用说明.md"
echo - 修改配置后需要重启服务才能生效 >> "%DEPLOY_DIR%\使用说明.md"
echo. >> "%DEPLOY_DIR%\使用说明.md"
echo ## 版本信息 >> "%DEPLOY_DIR%\使用说明.md"
echo - 版本：v2.1.0 >> "%DEPLOY_DIR%\使用说明.md"
echo - 构建时间：%TIMESTAMP% >> "%DEPLOY_DIR%\使用说明.md"
echo - 部署模式：Production >> "%DEPLOY_DIR%\使用说明.md"

echo [8/8] 打包完成！
echo.
echo ========================================
echo 打包成功完成！
echo ========================================
echo 部署包位置: %DEPLOY_DIR%
echo 可执行文件: service_config_manager.exe
echo 包大小: 
for %%A in ("%DEPLOY_DIR%") do echo %%~zA 字节
echo.
echo 使用方法:
echo 1. 复制整个部署包到目标服务器
echo 2. 以管理员身份运行 "启动服务管理工具.bat"
echo 3. 在图形界面中管理 WMS 服务
echo.
echo 注意: 服务管理需要管理员权限！
echo ========================================

pause 